# -*- coding: utf-8 -*-

'''
File: multi-inherintance.py
Author: Damien Riquet <d.riquet@gmail.com>
Description: Exemple d'heritage multiple en python

On cherche ici a avoir l'héritage :

        A
      /   \
    B      C
      \   /
        D

L'exemple donne sur moodle sur l'heritage simple utilise la forme suivante pour l'heritage :
    def __init__(self):
        ClasseMere.__init__(self)
pour s'initialiser.

Dans le cas de l'heritage multiple, il faut utiliser super().
super() permet d'appeler les methodes de toutes les classes mères

Voir l'exemple ci-dessous.

Pour executer, dans un terminal :
    $ python multi-inherintance.py
        Init(A)
        Init(C)
        Init(B)
        Init(D)
        d_arg d
        c_arg c
        b_arg b
        a_arg a

'''


class A(object):
    def __init__(self):
        self.a_arg = 'a'
        print "Init(A)"

class B(A):
    def __init__(self):
        super(B, self).__init__()
        self.b_arg = 'b'
        print "Init(B)"

class C(A):
    def __init__(self):
        super(C, self).__init__()
        self.c_arg = 'c'
        print "Init(C)"

class D(B, C):
    def __init__(self):
        super(D, self).__init__()
        self.d_arg = 'd'
        print "Init(D)"


if __name__ == '__main__':
    d = D()
    print 'd_arg', d.d_arg
    print 'c_arg', d.c_arg
    print 'b_arg', d.b_arg
    print 'a_arg', d.a_arg
